平成24年 春期 基本情報技術者 午後 問12
問12 CASL問12 次のアセンブラプログラムの説明及びプログラムを読んで,設問1〜3に答えよ。 〔プログラム1の説明〕 主プログラムから渡された二つの数字列(数字列1と数字列2)をそれぞれ正の 10 進数とみなして加算し, 結果を数字列で返す副プログラム ADDC である。二つの数字列の加算の例を図1に示す。 図1 二つの数字列の加算の例 (1) 汎用レジスタ GR1 〜 GR5 には,それぞれ次の内容が設定されて,主プログラムから渡される。
GR1:数字列1の先頭アドレス GR2:数字列2の先頭アドレス GR3:結果領域の先頭アドレス GR4:数字列1の長さ(文字数) GR5:数字列2の長さ(文字数) (3) 結果の数字列は結果領域に格納し,長さ(文字数)は GR0 に設定して,主プログラムに返す。 (4) 数字列1と数字列2の長さ(文字数)は,それぞれ1以上とする。 (5) 数字列1と数字列2の左端の文字は,“0”でないものとする。 (6) 副プログラムから戻るとき,汎用レジスタ GR0 〜 GR7 の内容は元に戻す。 〔プログラム1〕 (行番号) 1 ADDC START 2 RPUSH 3 CPA GR4,GR5 4 JPL CONT 5 PUSH 0,GR4 ; 6 LD GR4,GR5 ; 7 POP GR5 ; GR4≧GR5 となるように 8 PUSH 0,GR1 ; 数字列1と数字列2のポインタ 9 LD GR1,GR2 ; を入替え 10 POP GR2 ; 11 CONT ADDA GR1,GR4 12 ADDA GR2,GR5 13 LD GR0,=0 ; 桁上げフラグを初期化 14 PUSH 0 ; スタックデータの終わりの印 15 LOOP1 LAD GR2,-1,GR2 16 LD GR6,0,GR2 17 AND GR6,=#000F 18 LOOP2 LAD GR1,-1,GR1 19 ADDA GR6,0,GR1 ; 1桁加算 20 ADDA GR6,GR0 ; 桁上げフラグを加算 21 CPA GR6,='9' ; 桁上げ? 22 JPL CARRY 23 LD GR0,=0 ; 桁上げフラグをクリア 24 JUMP NEXT 25 CARRY LD GR0,=1 ; 桁上げフラグを設定 26 27 NEXT PUSH 0,GR6 ; 加算結果1桁を保存 28 29 JZE END1 30 31 JPL LOOP1 32 LD GR6,=0 33 JUMP LOOP2 34 END1 LD GR0,GR0 ; 左端を桁上げ? 35 JZE NOCARRY 36 LD GR1,='1' ; 左端に'1'を追加 37 LOOP3 ST GR1,0,GR3 38 LAD GR3,1,GR3 39 NOCARRY POP GR1 ; 加算結果1桁取出し 40 LD GR1,GR1 41 JZE END2 42 ADDA GR0,=1 43 JUMP LOOP3 44 END2 RPOP 45 RET 46 END 設問1 プログラム1中の に入れる正しい答えを, 解答群の中から選べ。 解答群 エ SUBA GR5,=1 オ SUBA GR5,=9 カ SUBA GR5,=10 キ SUBA GR6,=1 ク SUBA GR6,=9 ケ SUBA GR6,=10
設問2 次の記述中の に入れる正しい答えを, 解答群の中から選べ。 図1の数字列1と数字列2を引数として副プログラム ADDC を実行した場合, 行番号 25 の LD 命令は 回実行される。 解答群
設問3 副プログラム ADDC を使用して,n 個 ( n ≧ 1 )の数字列を入力し, 総和を求めて数字列で出力するプログラム SUMC を作成した。n=5 の場合の例を図2に示す。 プログラム2中の に入れる正しい答えを,解答群の中から選べ。 なお,入力される数字列,総和は 256 桁以内に収まるものとする。
図2 数字列1〜5の総和の例 〔プログラム2〕 SUMC START LAD GR1,BUF1 ; 数字列1のポインタを設定 IN BUF1,LEN1 ; 最初の数字列を入力し数学列1とする LD GR4,LEN1 ; 数字列1の長さを設定 LAD GR3,BUF3 ; BUF3 を総和の領域として設定 LAD GR2,BUF2 ; 数字列2のポインタを設定 LOOP IN BUF2,LEN2 ; 次の数字列を入力し数字列2とする LD GR5,LEN2 ; 数字列2の長さを設定 JMI FIN1 ; 入力終了 CALL ADDC PUSH 0,GR1 ; 総和の領域のポインタと LD GR1,GR3 ; 数字列1のポインタを入替え POP GR3 ; JUMP LOOP FIN1 CPA GR1,GR3 ; 総和の領域を判定 JZE FIN2 ST GR4,LEN1 OUT BUF1,LEN1 JUMP FIN3 FIN2 ST GR4, LEN3 OUT BUF3,LEN3 FIN3 RET BUF1 DS 256 ; 数字列1又は総和 BUF2 DS 256 ; 数字列2 BUF3 DS 256 ; 総和又は数字列1 LEN1 DS 1 LEN2 DS 1 LEN3 DS 1 END 解答群 エ LD GR3,GR0 オ LD GR4,GR0 カ LD GR5,GR0
[←前の問題] [次の問題→] [問題一覧表] [分野別] [基本情報技術者試験TOP ]
©2004-2024 情報処理試験.jp
|
プライバシーポリシー・著作権・リンク
|
お問合わせ
|